package com.matt.service;

import com.matt.commons.dto.sso.StaffDTO;
import com.matt.domain.course.Course;
import com.matt.domain.course.CourseChild;
import com.matt.domain.courseV2.VendorCoursePackage;
import com.matt.foundation.DO.course.CourseAddDO;
import com.matt.foundation.DO.course.WebCoursePageDO;
import com.matt.foundation.query.ClassesQuery;
import com.matt.foundation.query.CourseAreaQuery;
import com.matt.foundation.query.CourseQuery;
import com.matt.foundation.vo.course.CourseAreaAddVo;
import com.matt.foundation.vo.course.CourseAreaBuildPageVo;
import com.matt.foundation.vo.course.CourseAreaBuildVo;
import org.springframework.data.domain.Page;

;import java.util.List;
import java.util.Map;

/**
 * *******************************
 * Created by Ron.
 * form com.matt
 * on 2017/9/1
 * *******************************
 */
public interface CourseService {

    List<Map> findAreaAllType(String areaId);

    Page<WebCoursePageDO> getCourseByType(CourseQuery courseQuery, Integer type,Integer packageType);

    Course createCourseByCommonTemplete(String ticket, CourseAddDO courseAddDO, StaffDTO dto);

    Course getCourseCommon(String courseId, Integer type);

    Object getCourseCommonByPage(CourseAreaQuery query);

    Course getById(String courseId);
    //创建园区自建课程
    Course createAreaCourse(StaffDTO staff, CourseAreaAddVo courseAreaAddVo);

    Page<CourseAreaBuildPageVo> courseAreaBuildPage(CourseAreaQuery query);

    CourseAreaBuildVo getCourseAreaBuildByCourseId(String areaId, String courseId);

    boolean deleteCourseAreaBuildByCourseId(String areaId, String courseId);

//    //厂商课程
//    Page<VendorCourse> vendorCoursePage(VendorCourseQuery query);
//
//    //厂商课程详情
//    VendorCourse getVendorCourseByCourseId(String courseId);
//
    List<VendorCoursePackage> findAreaPackages(String areaId);

    /**
     * 章节列表
     * @param query
     * @return
     */
    Page<CourseChild> courseChildAreaBuildPage(CourseAreaQuery query);

    /**
     * 新增章节
     * @param staff
     * @param courseChild
     * @param childList
     * @return
     */
    CourseChild createCourseChild(StaffDTO staff, CourseChild courseChild);

    /**
     * 章节详情
     */
    CourseChild courseChildDetail(String id);

    /**
     * 删除章节（包括所有子章节）
     */
    boolean removeCourseChildAll(String id);

    /**
     * 修改章节
     * @param staff
     * @param courseChild
     * @return
     */
//    CourseChild editCourseChild(StaffDTO staff, CourseChild courseChild);

    /**
     * 屏蔽章节
     * @param id
     * @return
     */
    boolean editStatus(String id,Integer status);


    /**
     * 获取当前章节子章节
     * @param id
     * @return
     */
    List<CourseChild> getChild(String id);

    /**
     * 新建课程
     * @param course
     * @return
     */
    Course createCourse(StaffDTO staff,Course course);

    /**
     * 课程列表
     * @param query
     * @return
     */
    Page<Course> courseList(ClassesQuery query);

    /**
     * 直播录播课程列表
     * @param query
     * @return
     */
    Page<Course> courseLiveList(ClassesQuery query);

    /**
     * 通过课程id查询所有的章节以及子章节
     */
    List<CourseChild> getCourseChildList(CourseAreaQuery query);

    /**
     * 新增播放量
     * @param id
     */
    Course addPlayCount(String id);

    Page<CourseChild> courseListByTea(CourseAreaQuery query);
}
